作業Log | scrapbox-selection
2020-12-25 11:08:59
これclassにする必要あったんだっけ?
11:12:49 選択範囲内のテキストを取得する関数も実装しておく
11:26:33 テストしてみた
取得範囲がずれている
https://gyazo.com/c82c06ff911313ad52f5c0c3138df493
直したいな
ずれないときもあるから困った
かなり微妙な調節が必要そう
12:12:02 テストコードでいろいろ見る
キー入力のたびに表示されるようにした
12:24:23 やはりずれている
ときときピッタリ合うと思えば、2文字くらい選択範囲を動かしても取得文字が全然変わらないのが問題をややこしくしている
余計なconsole.logがあって見にくいのでそれを消す
その代わりに、実際の選択範囲のgetBoudingClientRectの値と、近辺の文字のそれとを表示して、どんな条件で文字が取得できないのかを調べよう
12:34:10 選択行が一行のときに取得できるテキストがおかしい
なんかむちゃくちゃになってる
一行しかないときは処理を変えないとダメそう
エラーが出ないときもある
13:15:28 Char.nextとかを作ったのに呼び出されないのは、CharではなくHTMLSpanElementを呼び出しているからだった
そりゃ無理だ
13:17:40 なおした
13:28:52 面倒なことになっている
https://gyazo.com/d8b0f969ee7f017d17dacb87746fdf99
本来はiまで選択されているのだが、小数点切り捨ての結果533 < 533がfalseとなり、iが判定から外れてしまう
判定方法を変えるしかなさそう
方法
13:44:09 この方法で選択範囲のほうは問題なさそう
14:07:00 rightと完全一致してしまうときがある
https://gyazo.com/8027bdad06197de72f2089c76d3c3bcd
↑ほんとうはsまでしか選択していない
2020-12-26 02:51:50 小数点以下を切り上げないことで判定に失敗した例
https://gyazo.com/d9a1961b55b13b9de05a439a78e4f91c
↑場までしか選択していないのに、のが入ってしまった
座標判定自体をなんとかしないとダメそうだな……
方法
親要素からの相対座標になるのでかなり複雑になる
強調表示された文字だと、親要素の<strong>からの相対座標に鳴ってしまったり
座標判定に曖昧性をもたせる
閉区間に入っている && 文字の幅の90%以上を含んでいる
↓はbのほんの少しにしか侵入していないので、aまでを選択しているとみなす
https://gyazo.com/c36db0d9ce3a05d3460deacb0dd3f219
選択範囲用の座標判定処理を別途作るしかなさそう
↑の図の判定は「面」の情報が必要になる
13:44:24 cursorの方を確認してみる
14:16:07 切り捨てなくても問題なく文字を取得できていそう
2020-12-26 03:06:26 だめだった
https://gyazo.com/4273bdb63e1337f1dfb7fa24aae7474b
困ったなーtakker.icon
座標計算をもう一度考え直す必要があるか
行けそうtakker.icon*3
03:42:28 実装終了
04:26:02 selectionに実装中
char === undefindedのときの処理を作っている
先頭や末尾に選択範囲の端があるときにundefinedになる
04:40:02 実装終了。テスト中
選択範囲の右端が行末にあると、次行もselection.textに含まれてしまう
04:42:06 座標計算の段階で、間違えて次行を選択していると判定してしまっているみたい?
04:48:33 先頭と末尾の文字が含まれていると誤判定するみたい
https://gyazo.com/f8af0b07b0ab5b9a5031a042984794e7
でもこれだけが原因ではない気がする
一旦テスト
04:54:35 選択範囲の右端が先頭のときに特別な処理をしていたのが原因?
多分違うだろうけど
ただ必要ない処理だったので消した
選択範囲の右端が先頭のときには、幅が0のdiv.selectionがいる
05:02:35 ↑で対処できたみたい
ただ、先頭に選択範囲の右端がいるとき、空行が2つも入ってしまっている?
05:03:17 console.log()で中身をみてみる
05:09:32 行頭から選択しているときに、何故か前行の末尾から選択している判定になってしまっている
05:12:26 startがleft,rightともにundefinedになっている
直してテストする
05:17:59 うまくいった?みたい?
05:18:13 テキストの取得周りを整理する
05:25:32 なんとかなった
コードブロックでまだ微妙なところがあるけど、これは多分自分のCSSが悪さしている
https://gyazo.com/15c6accf2b5074ba29790ad3d9bd89e2
06:06:30 直した
06:21:04 だめだった
空白の大きさが0になってしまう
06:21:20 直し中
07:14:52 修正終了
2020-12-26 07:27:09 とりあえず完成
あとはバグ取りとかだけか
07:29:29 致命的なバグを発見
画像などテキストでない要素の隣などに選択範囲の端があると、正常に範囲を取得できない